package com.example.supplychainbackend.service;

import com.example.supplychainbackend.controller.dto.blockchain.UploadInfo;
import com.example.supplychainbackend.controller.dto.warehouse.*;

import java.util.List;

public interface WarehouseService {
    Long createInboundBill(InboundBillDto inboundBillDto);

    InboundBillDto updateInboundBill(Long id, InboundBillDto inboundBillDto);

    InboundBillDto getInboundBill(Long id);

    List<InboundBillDto> getAllInboundBill(Long eid);

    Long deleteInboundBill(Long id);

    Long createOutboundBill(OutboundBillDto inboundBillDto);

    OutboundBillDto updateOutboundBill(Long id, OutboundBillDto inboundBillDto);

    OutboundBillDto getOutboundBill(Long id);

    List<OutboundBillDto> getAllOutboundBill(Long eid);

    Long deleteOutboundBill(Long id);

    Long createStock(StockDto stockDto);

    Long createStockByInbound(Long inboundId, InboundBillDto inboundDto);

    StockDto updateStock(Long id, StockDto stockDto);

    StockDto getStock(Long id);

    List<StockDto> getAllStock(Long eid);

    Long deleteStock(Long id);

    String createWareHouseArea(WarehouseAreaDto form);

    WarehouseAreaDto updateWareHouseArea(String id, WarehouseAreaDto form);

    WarehouseAreaDto getWareHouseArea(String id);

    String deleteWareHouseArea(String id);

    List<WarehouseAreaDto> getAllAreas();

    Long createWarehouseLocation(WarehouseLocationDto dto);
    WarehouseLocationDto updateWarehouseLocation(Long id, WarehouseLocationDto dto) throws Exception;
    Long deleteWarehouseLocation(Long id);
    WarehouseLocationDto getByIdWarehouseLocation(Long id) throws Exception;
    List<WarehouseLocationDto> getListWarehouseLocation();

    Long createWarehousePosition(WarehousePositionDto dto);
    WarehousePositionDto updateWarehousePosition(Long id, WarehousePositionDto dto) throws Exception;
    Long deleteWarehousePosition(Long id);
    WarehousePositionDto getByIdWarehousePosition(Long id) throws Exception;
    List<WarehousePositionDto> getListWarehousePosition();
    Long bindWarehousePositionDevice(Long id, BindDeviceReqDto dto);

    UploadInfo uploadOutboundBill(String id);

    UploadInfo uploadInboundBill(String id);
}
